package gestion.dao;

import gestion.conexion.ConexionBD;
import gestion.modelo.Idea;
import gestion.modelo.Usuario;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

public class IdeaDAO extends BaseDAO {

	
	/*
	 * Insertar ideas 
	 */
 

	public Idea Insertar(Idea cf, int idpersona, int idestado, int idpersona_coordinador){
		
		String query = "insert into idea (persona_idpersona,estado_idestado,idpersona_coordinador,titulo,descripcion,palabra_clave,archivo) " +
				"values (?,?,?,?,?,?,?) ";
		Connection conn = null;
		PreparedStatement pstm = null;
		ResultSet rs = null;
		
		try {
			conn = ConexionBD.obtenerConexion();
			pstm = conn.prepareStatement(query);
			
			pstm.setInt(1,idpersona);
			pstm.setInt(2,idestado);
			pstm.setInt(3,idpersona_coordinador);
			
			pstm.setString(4, cf.getTitulo());
			pstm.setString(5, cf.getDescripcion());
			pstm.setString(6, cf.getPalabra_clave());
			pstm.setString(7, cf.getArchivo());
			
			
			int i = pstm.executeUpdate();	
		
			
			
		} catch (SQLException e) {
			
				System.out.println(e.getMessage());
	
		}finally{
			this.cerrarConexion(conn);
			this.cerrarResultSet(rs);
			this.cerrarStatement(pstm);
			
					
		}
		
		return cf;
	}
	
	
	public Idea actualizar(Idea i , int idpersona, int idestado, int idpersona_coordinador){
		String query = "update idea set persona_idpersona=?," +
				"estado_idestado=?," +
				"idpersona_coordinador=?," +
				"titulo=?," +
				"descripcion=?," +
				"palabra_clave=?," +
				"archivo=? WHERE ididea=?";
				
		Connection con = null;
		PreparedStatement stmt = null;
		
		try {
			con = ConexionBD.obtenerConexion();			
			stmt = con.prepareStatement(query);
			
			stmt.setInt(1, idpersona);
			stmt.setInt(2, idestado);
			stmt.setInt(3, idpersona);
			
			stmt.setString(4, i.getTitulo());
			stmt.setString(5, i.getDescripcion());
			stmt.setString(6, i.getPalabra_clave());
			stmt.setString(7, i.getArchivo());
			
			stmt.setInt(8, i.getId());
			
			int respuesta = stmt.executeUpdate();
			
			if (respuesta !=1 ) {
				
				throw new SQLException("No se pudo actualizar");
				
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		
		return i;
		
	}
	
	
	
	
	/*
	  * buscar ideas por nombre , concepto , palabra clave y/o estado
	  */
		
		
	public Collection<Idea>   buscarPorNombre(String concepto, int idestado)
			throws Exception {
String query = "SELECT persona.nombre, persona.paterno, idea.titulo, idea.descripcion, idea.palabra_clave, idea.estado_idestado " +
		"	FROM persona INNER JOIN idea ON persona.idpersona = idea.persona_idpersona" +
		"	WHERE (idea.titulo LIKE ? or idea.descripcion LIKE ? or idea.palabra_clave LIKE ?)" +
		"	and  idea.estado_idestado=? ";
		
		Collection<Idea> lista = new ArrayList<Idea>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, "%" + concepto + "%");
			stmt.setString(2, "%" + concepto + "%");
			stmt.setString(3, "%" + concepto + "%");
			
			stmt.setInt(4,  idestado );
			
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				
 
				Idea i = new Idea();
				
				i.setTitulo(rs.getString("titulo"));
				i.setDescripcion(rs.getString("descripcion"));
				i.setPalabra_clave(rs.getString("palabra_clave"));
				
				Usuario u = new Usuario();
				u.setNombres(rs.getString("nombre"));
				
				i.setUsuario(u);
 
				
				lista.add(i);

			 
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new Exception(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}
		
	
}
